<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>InitPHP框架 PHP框架 - A PHP Framework - 全局api</title>
<link href="static/common.css" type="text/css" rel="stylesheet" />
<meta name="keywords" content="php框架，国产php框架, initphp框架，MVC，分层体系" />
<meta name="description" content="initphp框架是一款国产php框架。initphp框架主要基于MVC模式，具备代码清晰，操作简单，功能齐全，开发快速，高效安全等特点，是您选择php框架的首选。" />
</head>
<body>
<div class="header">
  <div class="header_nav">InitPHP (A PHP Framework) 用户手册</div>
  <div class="header_div">
    <div class="header_title">第6章 6.1 全局api</div>
    <div class="header_right"><a href="5_3.htm">上一页</a> <a href="6_2_1.htm">下一页</a> </div>
  </div>
</div>
<div class="title">目录</div>
<ul style="list-style:none;">
  <li><a href="#register_global">$this->register_global</a></li>
  <li><a href="#$this->load">$this->load</a></li>
  <li><a href="#$this->getUtil">$this->getUtil</a></li>
  <li><a href="#$this->getLibrary">$this->getLibrary</a></li>
  <li><a href="#$this->getCache()">$this->getCache</a></li>
  <li><a href="#$this->getNosql">$this->getNosql</a></li>
  <li><a href="#$this->getRedis">$this->getRedis</a></li>
  <li><a href="#$this->getMongo">$this->getMongo</a></li>
  <li><a href="#$this->getM">$this->getM</a></li>
  <li><a href="#$this->getC">$this->getC</a></li>
  <li><a href="#$this->getA">$this->getA</a></li>
  <li><a href="#InitPHP::init">InitPHP::init</a></li>
  <li><a href="#InitPHP::import">InitPHP::import</a></li>
  <li><a href="#InitPHP::loadclass">InitPHP::loadclass</a></li>
  <li><a href="#InitPHP::hook">InitPHP::hook</a></li>
  <li><a href="#InitPHP::output">InitPHP::output</a></li>
  <li><a href="#InitPHP::acl">InitPHP::acl</a></li>
  <li><a href="#InitPHP::getConfig">InitPHP::getConfig</a></li>
  <li><a href="#InitPHP::url">InitPHP::url</a></li>
  <li><a href="#InitPHP::getTime">InitPHP::getTime</a></li>
  <li><a href="#InitPHP::getDao">InitPHP::getDao</a></li>
  <li><a href="#InitPHP::getService">InitPHP::getService</a></li>
  <li><a href="#InitPHP::getController">InitPHP::getController</a></li>
   <li><a href="#InitPHP::cli_init">InitPHP::cli_init</a></li>
   <li><a href="#InitPHP::getLibrarys">InitPHP::getLibrarys</a></li>
   <li><a href="#InitPHP::getUtils">InitPHP::getUtils</a></li>
   <li><a href="#InitPHP::rpc_init">InitPHP::rpc_init()</a></li>
   <li><a href="#InitPHP::getRemoteService">InitPHP::getRemoteService()</a></li>
   <li><a href="#InitPHP::log">InitPHP::log()</a></li>
   <li><a href="#InitPHP::registerAutoloader">InitPHP::registerAutoloader()</a></li>
</ul>
<div class="nav"></div>
<div class="title">1. InitPHP::acl($config = array()) 权限控制函数<a name="InitPHP::acl"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>框架访问控制，可以根据用户自定义的$config，来控制用户访问的权限。主要对框架的3个URL参数进行控制，m、c、a。全局使用，在Dao Service 和Controller中都可以使用该API</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$config</td>
    <td>String </td>
    <td>是</td>
    <td>权限控制参数，允许访问的权限。如果为空，则具备全局权限</td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
public function run() {
	$config = array('user' => array('get', 'list')); //具备获取用户列表和用户详情
	if (!InitPHP::acl($config)) exit('没有权限访问'); 
	$this->view->display();
}
</pre>
<div class="nav"></div>
<div class="title">2. $this->getLibrary($class) 扩展库类加载<a name="$this->getLibrary"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>该函数最终经过$this->load()去加载框架扩展库中的类文件 。将需要调用的框架扩展库中的类名做为$class名称参数传输（不需要带Init类名称后缀）就可以使用扩展库类了 。全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$class </td>
    <td>String </td>
    <td>是</td>
    <td>需要调用的扩展库类名称，不需要Init后缀 </td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
public function run() {
	$function = $this->getLibrary('function'); //调用library/function.init.php
	echo $function->get_rand('abc', 10); //获取随机数
	echo $function->str_code('InitPHP2.1', '123456', $type = 'ENCODE'); //加密
	echo $function->str_code('LF1cQTZ7NFBMBQ==', '123456', 'DECODE'); //解密
	echo $function->bitsize(100); //M MB单位转换
	$this->view->display();
}
</pre>
<div class="nav"></div>
<div class="title">3. $this->getUtil($class) 工具库类加载<a name="$this->getUtil"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>该函数最终经过$this->load()去加载框架工具库中的类文件。将需要调用的框架工具库中的类名做为$class名称参数传输（不需要带Init类名称后缀）就可以使用工具库函数 。全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$class </td>
    <td>String </td>
    <td>是</td>
    <td>需要调用的工具库类名称，不需要Init后缀 </td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
public function run() {
	$cookie = $this->getUtil('cookie'); //获取cookieInit类对象，core/util/cookie.init.php
	$cookie->set('test', 'InitPHP 2.1'); //设置COOKIE
	$cookie_val = $cookie->get('test');//获取cookie值
	echo $cookie_val;
	$this->view->display();
}
</pre>
<div class="nav"></div>
<div class="title">4. $this->getA() 获取a参数<a name="$this->getA"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p> 获取URL路由中的a参数。全局使用，在Dao Service 和Controller中都可以使用该API</p>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
public function run() {
	$this->getA();
}
</pre>
<div class="nav"></div>
<div class="title">5. $this->getC() 获取c参数<a name="$this->getC"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p> 获取URL路由中的c参数。全局使用，在Dao Service 和Controller中都可以使用该API</p>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
public function run() {
	$this->getC();
}
</pre>
<div class="nav"></div>
<div class="title">6. $this->getCache() 调用缓存类<a name="$this->getCache()"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>缓存模型属于DAO（数据操作层）模块，在DAO中直接使用$this->cache就可以使用缓存了。因为各种业务需求，缓存可能会部署在Controller层，也有可能部署在Service层，这个时候我们提供了这个$this->getCache()全局方法来供大家调用。调用该函数后，就直接可以使用缓存的函数了。该函数也是最终通过$this->load函数加载DAO中的缓存模块来实现（具体可以看下这个函数）。全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
public function run() {
	$this->getCache()->set("Hello", "1111111111111", 3, 'MEM'); //设置一个memcache类型的缓存
	echo $this->getCache()->get("Hello", 'MEM'); //获取缓存数据
	$this->view->assign("hello", array('username' => 'sadasd'));
	$this->view->set_tpl("index_run");
	$this->view->display();
}
</pre>
<div class="nav"></div>
<div class="title">7. InitPHP::getConfig() 获取配置文件<a name="InitPHP::getConfig"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>获取配置文件。不建议经常调用此函数，或者直接打印出配置文件数据。全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
class indexController extends Controller {
	
	public $initphp_list = array('test'); 
	
	public function run() {
		$config =  InitPHP::getConfig();
		$this->view->display();
	}
}
</pre>
<div class="nav"></div>
<div class="title">8. InitPHP::getController() 调用Controller类<a name="InitPHP::getController"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>一般不建议采用Controller调用另外一个Controller中的方法。该函数可以用于接口聚集，将各种接口聚集到一个接口中使用。全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$controllerName </td>
    <td>String </td>
    <td>是</td>
    <td>控制器名称</td>
  </tr>
  <tr>
    <td>$functionName </td>
    <td>String </td>
    <td>是</td>
    <td>方法名称</td>
  </tr>
  <tr>
    <td>$params </td>
    <td>String </td>
    <td>是</td>
    <td>函数参数</td>
  </tr>
  <tr>
    <td>$controllerPath </td>
    <td>String </td>
    <td>是</td>
    <td>控制器文件夹名称,例如在控制器文件夹目录中，还有一层目录，user/则，该参数需要填写</td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
class indexController extends Controller {
	
	public $initphp_list = array('test'); //Action白名单

	public function run() { 
		InitPHP::getController("userController", "run", array(), 'user');
	}
	
	public function test() {
		echo 'asdasd';
	}

}
</pre>
<div class="nav"></div>
<div class="title">9. InitPHP::getDao($daoname, $path = '') 调用DAO类<a name="InitPHP::getDao"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>在Service中需要调用Dao，该函数能直接调用Dao。$daoname不需要填写Dao的后缀名。$path根据不同的文件夹分类，可以调用不同文件夹下的Dao类。全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$daoname </td>
    <td>String </td>
    <td>是</td>
    <td>Dao名称，不需要Dao后缀名 </td>
  </tr>
  <tr>
    <td>$path </td>
    <td>String</td>
    <td>否 </td>
    <td>路径，例如Dao文件夹下需要分各种文件夹，user/,product/，则直接使用'user' </td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
/**
 * 后台日志服务
 */
class AdminLogService extends BaseService {
		
	/**
	 * 新增日志
	 * 参数结构
	 * array(
	 * 'username' => 用户名称
	 * 'ip'=> 来源IP地址
	 * 'controller' => c
	 * 'action' => a
	 * 'msg' => msg信息
	 * 'data' => 参数
	 * )
	 * @param array $data
	 */
	public function addLog($data) {
		$data = $this->_cookLogData($data);
		$data['update_time'] = InitPHP::getTime();
		return $this->_getAdminLogDao()->add($data);
	}

	/**
	 * 日志DAO
	 * @return AdminLogDao
	 */
	private function _getAdminLogDao() {
		return InitPHP::getDao('AdminLog', 'admin');
	}
	
}
</pre>
<div class="nav"></div>
<div class="title">10. $this->getM() 获取m参数<a name="$this->getM"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p> 获取URL路由中m参数。全局使用，在Dao Service 和Controller中都可以使用该API</p>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
class indexController extends Controller {
	
	public $initphp_list = array('test'); 
	
	public function run() {
		$this->getM();
	}

}
</pre>
<div class="nav"></div>
<div class="title">11. $this->getMongo() 调用Mongo类<a name="$this->getMongo"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>使用Mongo你需要在你的服务器上配置你的Mongo服务。您还需要配置您的Mongo参数$InitPHP_conf['mongo']。该接口支持多Mongo服务器连接，您只需要$InitPHP_conf['mongo']['default']如这个default的key，只在在使用$this->getMongo('default')就可以达到调用不同Mongo服务器的功能。全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
class indexController extends Controller {
	
	public $initphp_list = array('test'); //Action白名单

	public function run() {
		$this->getMongo()->selectCollection("user");
		$this->getMongo()->insert(array('username' => 'asdasd', 'password' => '123456'));
	}
	
	public function test() {}

}
</pre>
<div class="nav"></div>
<div class="title">12. $this->getNosql() 调用NOSQL对象类<a name="$this->getNosql"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>Nosql模型默认属于DAO（数据操作层）。因为考虑到数据操作层Nosql使用普遍会少一些，所以调用Nosql时候，在Dao中不能直接使用$this->nosql来调用（如果需要使用，可以修改Dao基类）。该函数直接获取Nosql工厂对象，需要具体使用Redis或者Mongodb则需要调用init()函数来初始化使用的Nosql类型。<span style="color:#FF0000">一般情况下不建议使用该函数，因为我们封装了$this->getRedis()和$this->getMongo()方法，让大家直接调用对应的nosql。</span>全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
class indexController extends Controller {
	
	public $initphp_list = array('test'); //Action白名单

	public function run() {
		 $this->getNosql()->init('REDIS')->set("val", "Hello World"); //调用Redis方法
	}
	
	public function test() {}

}
</pre>
<div class="nav"></div>
<div class="title">13. $this->getRedis() 调用Redis类<a name="$this->getRedis"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>使用Redis你需要在你的服务器上配置你的Redis服务。您还需要配置您的Redis参数$InitPHP_conf['redis']。该接口支持多Redis服务器连接，您只需要$InitPHP_conf['redis']['default']如这个default的key，只在在使用$this->getRedis('default')就可以达到调用不同Redis服务器的功能。全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$key</td>
    <td>String </td>
    <td>是</td>
    <td>设置键名称</td>
  </tr>
  <tr>
    <td>$value</td>
    <td>String </td>
    <td>是</td>
    <td>设置值</td>
  </tr>
  <tr>
    <td>$timeOut</td>
    <td>Int</td>
    <td>否</td>
    <td>失效时间</td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
class indexController extends Controller {
	
	public $initphp_list = array('test'); //Action白名单

	public function run() {
		$this->getRedis('serv0')->set("Hello", "1111111111111", 3); //设置一个时间为3秒的值
		echo $this->getCache('serv0')->get("Hello"); //获取数据
	}
	
	public function test() {}

}
</pre>
<div class="nav"></div>
<div class="title">14. InitPHP::getService($servicename, $path = '') 调用Service类<a name="InitPHP::getService"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>在Controller中需要调用Service，该函数能直接调用Service。$servicename不需要填写Service的后缀名。$path根据不同的文件夹分类，可以调用不同文件夹下的Service类。全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$servicename </td>
    <td>String </td>
    <td>是</td>
    <td>Service名称，不需要后缀名</td>
  </tr>
  <tr>
    <td>$path </td>
    <td>String</td>
    <td>否 </td>
    <td>路径，例如Service文件夹下需要分各种文件夹，user/,product/，则直接使用'user' </td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
/**
 * 站点基本设置
 * @author administrator
 */
class siteController extends BaseAdminController {
	
	public $initphp_list = array('editdo'); //Action白名单 
	
	private $key = 'site_basic_config'; //配置表 键名称
	
	/**
	 * 网站基本配置
	 */
	public function run() {
		$siteInfo = $this->_getConfService()->getConfig($this->key);
		$this->view->assign('siteInfo', $siteInfo);
		$this->view->set_tpl('site/site_run');
	}
	
	/**
	 * 网站基本配置更新
	 */
	public function editdo() {
		$siteInfo = $this->controller->get_gp('site');
		$result = $this->_getConfService()->updateConfig($this->key, $siteInfo);
		if (!$result) $this->ajax_return(0, '更新失败！');
		$this->ajax_return(1, '更新成功！');
	}
	
	/**
	 * 前置操作
	 */
	public function before() {
		parent::before();
		$this->view->assign('siteRun', $this->getUrl('site', 'run'));
		$this->view->assign('siteEditdo', $this->getUrl('site', 'editdo'));
	}
	
	/**
	 * @return ConfService
	 */
	private function _getConfService() {
		return InitPHP::getService('Conf', 'conf');
	}

}
</pre>
<div class="nav"></div>
<div class="title">15. InitPHP::getTime() 获取时间<a name="InitPHP::getTime"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>获取时间函数，单例。全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
InitPHP::getTime(); 
</pre>
<div class="nav"></div>
<div class="title">16. InitPHP::hook($hookname, $data = '') 框架hook插件机制<a name="InitPHP::hook"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>可以在你项目中暂时不需要开发这个模块，但是后期可能会有很多扩展的地方放置一个hook,方便后期扩展。插件机制需要配置配置文件中的$InitPHP_conf['hook']使用。全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$hookname </td>
    <td>String </td>
    <td>是</td>
    <td>钩子名称</td>
  </tr>
  <tr>
    <td>$data</td>
    <td>Array </td>
    <td>否</td>
    <td>传递参数</td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
class indexController extends Controller {
	
	public $initphp_list = array('test'); 
	
	public function run() {
		InitPHP::hook('guest', array('uid'=>100, 'username'=>'init')); //放置一个挂钩
		$this->view->display();
	}
	
	public function test() {
		echo 'Hello World';
	}
	
	/**
	 * @return testService
	 */
	private function getTestService() {
		return InitPHP::getService('test','test');
	}

}
//hook.conf.php 插件配置文件
/*
 *  钩子名称 => array(array('挂钩上对应的类名称', '函数名称')) 一个挂钩多个函数
 *  钩子名称 => array(挂钩上对应的类名称,函数名称) //一个挂钩一个钩子函数
 */
return array(
	//guest挂钩，InitPHP::hook('guest','Hook'); 在程序中放置钩子，guest钩子名称，Hook传递的参数
	'guest' => array( 
		array('test', 'run'), 
		array('test', 'aa')
	)
);
//插件具体实现- test.conf.php
//一个测试的钩子
class testHook {
    public function run($data) {
  		echo '第一个简单的' . $data;
    }
	
	public function aa($data) {
		echo '<br/>第二个简单的' . $data;
	}
}
</pre>
<div class="nav"></div>
<div class="title">17. InitPHP::import($filename, array $pathArr = array()) 导入PHP文件函数<a name="InitPHP::import"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>根据相对路径导入PHP文件，可以导入单个文件，也可以在不知道文件夹的情况下，搜索文件目录 。全局使用，在Dao Service 和Controller中都可以使用该API </p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$filename </td>
    <td>String </td>
    <td>是</td>
    <td>需要导入的文件名称，可包含路劲 </td>
  </tr>
  <tr>
    <td>$pathArr</td>
    <td>Array </td>
    <td>否</td>
    <td>在不清楚路劲的情况下可以自动搜索 </td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
public function run() {
	InitPHP::import('library/helper/test.php'); //导入library/helper/test.php文件
	$test = InitPHP::loadclass('test'); //实例化test类
	$test->tt(); //调用函数
	$this->view->display();
}
</pre>
<div class="nav"></div>
<div class="title">18. InitPHP::init() 框架初始化<a name="InitPHP::init"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>在index.php入口文件中使用，运行框架。有在框架运行的时候才会用到，一般情况下不需要使用 。</p>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
define("APP_PATH",dirname(__FILE__));
header("Content-Type:text/html; charset=utf-8"); 
require_once('../initphp/initphp.php'); //导入配置文件-必须载入
require_once('conf/config.php'); //导入配置文件-必须载入
InitPHP::init(); //框架初始化
</pre>
<div class="nav"></div>
<div class="title">19. $this->load($class_name, $type) 框架全局加载接口<a name="$this->load"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>框架总体结构主要包括7个部分：框架运行类init/、Controller、DAO、Service、View、Util和Library，所有这些类的出口都需要经过$this->load()这个函数。一般情况下，框架内部已经封装好调用的具体接口，例如：$this->controller->get_gp() 。有特殊的情况才会用到该函数，但是使用者必须了解，你所有用的API都是经过这个接口出去的。单例模式 
  。全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$class_name </td>
    <td>String </td>
    <td>是</td>
    <td>需要调用框架内部类的类名，例如：Controller </td>
  </tr>
  <tr>
    <td>$type </td>
    <td>String </td>
    <td>是 </td>
    <td>调用不同的类型(c,s,v,d,u,l)，包含：Controller，Service，View，Dao，Util，Library中的类文件 </td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
$this->load('controller', 'c'); //导入Controller 
$this->load('view', 'v'); //导入View     
$this->load('service', 's'); //导入Service 
$this->load('dao', 'd'); //导入DAO
</pre>
<div class="nav"></div>
<div class="title">19. InitPHP::loadclass($classname, $force = false) 实例化一个类<a name="InitPHP::loadclass"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>实例化一个类，单例模式，如果需要强制实例化，可以将$force参数设置为true。全局使用，在Dao Service 和Controller中都可以使用该API</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$classname</td>
    <td>String </td>
    <td>是</td>
    <td>需要实例化的类名称 </td>
  </tr>
  <tr>
    <td>$force</td>
    <td>Bool </td>
    <td>否</td>
    <td>是否强制实例化</td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
public function run() {
	InitPHP::import('library/helper/test.php'); //导入library/helper/test.php文件
	$test = InitPHP::loadclass('test'); //实例化test类
	$test->tt(); //调用函数
	$this->view->display();
}
</pre>
<div class="nav"></div>
<div class="title">20. InitPHP::output($string, $type = 'encode') 输出HTML过滤<a name="InitPHP::output"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>对于PHP输出到页面上有HTML代码的变量，可以使用该函数进行过滤，防止XSS攻击。该函数可以将HTML代码转义，也可以还原转义的HTML。可以在模板中使用。全局使用，在Dao Service 和Controller中都可以使用该API。</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$string </td>
    <td>String </td>
    <td>是</td>
    <td>输出过滤的字符串 </td>
  </tr>
  <tr>
    <td>$type</td>
    <td>String </td>
    <td>是</td>
    <td>encode-转义，decode-反转义，默认 encode</td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
InitPHP::output("&lt;div&gt;&lt;/div&gt;"); 
</pre>
<div class="nav"></div>
<div class="title">21. $this->register_global($name, $value) 注册全局变量<a name="register_global"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>注册全局变量函数。注册全局变量后，可以直接使用$this->$name方法访问变量。全局使用，在Dao Service 和Controller中都可以使用该API </p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr >
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$name </td>
    <td>String </td>
    <td>是</td>
    <td>变量名称 </td>
  </tr>
  <tr>
    <td>$value </td>
    <td>String|Array|Int|Obj </td>
    <td>是 </td>
    <td>全局变量值，可以字符串，数组，整型，对象等等。 </td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
$this->register_global('title', 'InitPHP开源框架'); 
</pre>
<div class="nav"></div>
<div class="title">22. InitPHP::url($action, $params = array(), $baseUrl = '') URL转换函数<a name="InitPHP::url"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>网页上的站点URL都需要经过该函数进行转化，可以输出默认模式，rewrite模式，path模式的路径。全局使用，在Dao Service 和Controller中都可以使用该API</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$action </td>
    <td>String </td>
    <td>是</td>
    <td>m,c,a参数，一般写成 cms|user|add 这样的m|c|a结构</td>
  </tr>
    <tr>
    <td>$params </td>
    <td>Array</td>
    <td>否 </td>
    <td>参数</td>
  </tr>
  <tr>
    <td>$baseUrl </td>
    <td>String</td>
    <td>否 </td>
    <td>BaseUrl ,不填写，则走配置文件中的BaseUrl</td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
InitPHP::url('user|delete', array('id' => 100))
</pre>
<div class="nav"></div>

<div class="title">23. InitPHP::cli_init() 命令行模式运行php<a name="InitPHP::cli_init"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>命令行模式运行php,在linux的Crontab中直接调用计划任务的入口文件就可以走这个接口， 例如：php index.php user add</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$argv</td>
    <td>Array</td>
    <td>是</td>
    <td>命令行参数数组</td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
define("APP_PATH", "../app/"); 
header("Content-Type:text/html; charset=utf-8");   
require_once('../../../initphp/initphp.php'); //导入配置文件-必须载入
require_once(APP_PATH . 'conf/comm.conf.php'); //公用配置
InitPHP::cli_init($argv); //框架初始化 
</pre>
<div class="nav"></div>


<div class="title">24. InitPHP::getLibrarys($className) 调用框架扩展库类<a name="InitPHP::getLibrarys"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>可以直接调用框架扩展库类（框架的library中的类）。$className不需要填写扩展库的后缀名"Init"。</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$className </td>
    <td>String </td>
    <td>是</td>
    <td>框架扩展库类名称，不带"Init"后缀</td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
	public function run() {	
		$curl = InitPHP::getLibrarys("curl"); //调用curl类
		$curl->get("http://www.baidu.com"); //调用CURL	
		$this->view->display("index/run");
	}
</pre>
<div class="nav"></div>

<div class="title">24. InitPHP::getUtils($className) 调用框架工具库类<a name="InitPHP::getUtils"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>可以直接调用框架工具库类（框架的util中的类）。$className不需要填写工具库的后缀名"Init"。</p>
<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$className </td>
    <td>String </td>
    <td>是</td>
    <td>框架工具库类名称，不带"Init"后缀</td>
  </tr>
</table>
<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
	public function run() {	
		$queue = InitPHP::getUtils("queue");
		$queue->set("100");
		$queue->set("200");
		$queue->set("300");
		echo $queue->get();
		echo $queue->get();
		$this->view->display("index/run");
	}
</pre>
<div class="nav"></div>

<div class="title">25. InitPHP::rpc_init() 启动RPC服务<a name="InitPHP::rpc_init"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>启动RPC服务。如果你的业务需要对外提供你的Service层的RPC调用服务，则需要调用这个方法，初始化RPC服务。</p>
<p>具体参见 RPC调用 这一章节</p>

<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
define("APP_PATH", "../app/"); 
header("Content-Type:text/html; charset=utf-8");   
require_once('../../initphp/initphp.php'); //导入配置文件-必须载入
require_once(APP_PATH . 'conf/comm.conf.php'); //公用配置
InitPHP::rpc_init(); //提供RPC服务
</pre>
<div class="nav"></div>

<div class="title">26. InitPHP::getRemoteService() RPC调用远程的Service<a name="InitPHP::getRemoteService"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>InitPHP提供的RPC调用服务是基于HTTP的，所以getRemoteService方法是通过CURL去调用</p>
<p></p>
<p>具体参见 RPC调用 这一章节</p>

<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$class </td>
    <td>String </td>
    <td>是</td>
    <td>Service的类名称，不带后缀(“Service”)</td>
  </tr>
  <tr>
    <td>$method </td>
    <td>String </td>
    <td>是</td>
    <td>方法名称</td>
  </tr>
  <tr>
    <td>$args </td>
    <td>Array </td>
    <td>是</td>
    <td>参数数组，如果不需要传递参数，则传递空数组</td>
  </tr>
   <tr>
    <td>$group </td>
    <td>String </td>
    <td>否</td>
    <td>业务分组名称，默认default。</td>
  </tr>
  <tr>
    <td>$path </td>
    <td>String </td>
    <td>否</td>
    <td>Service文件夹路径，如果没有则为空。</td>
  </tr>
  <tr>
    <td>$timeout </td>
    <td>String </td>
    <td>否</td>
    <td>RPC调用超时时间，默认5秒。</td>
  </tr>
</table>

<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
try {
	//调用RPC服务。调用userService中的getUserInfo方法，参数是：array("我是神TEST", "10")
	//具体参见InitPHP::getRemoteService
	$ret = InitPHP::getRemoteService("user", "getUserInfo", array("我是神TEST", "10"));
	print_r($ret);
} catch (exceptionInit $e) {
	//服务调用异常
	echo "Exection:[" . $e->getCode(). "]".$e->getMessage();
} catch (Exception $e) {
	//业务异常
	echo "Exection:[" . $e->getCode(). "]".$e->getMessage();
}
</pre>
<div class="nav"></div>

<div class="title">27. InitPHP::log() 记录日志<a name="InitPHP::log"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>记录日志信息。</p>

<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$message </td>
    <td>String </td>
    <td>是</td>
    <td>错误信息</td>
  </tr>
  <tr>
    <td>$log_type </td>
    <td>String </td>
    <td>否</td>
    <td>日志类型   ERROR  WARN  DEBUG  IN</td>
  </tr>
</table>

<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
InitPHP::log("Controller is not found", ERROR);
</pre>
<div class="nav"></div>

<div class="title">28. InitPHP::registerAutoloader() 注册全局变量<a name="InitPHP::registerAutoloader"></a></div>
<div class="title">
  <h3>接口描述：</h3>
</div>
<p>注册全局变量。</p>

<div class="title">
  <h3>参数：</h3>
</div>
<table>
  <tr>
    <th style="width:20%;"> 参数 </th>
    <th style="width:20%;"> 类型 </th>
    <th style="width:10%;"> 是否必须 </th>
    <th style="width:50%;"> 描述 </th>
  </tr>
  <tr>
    <td>$callback </td>
    <td>String </td>
    <td>是</td>
    <td>回调方法</td>
  </tr>
</table>

<div class="title">
  <h3>使用：</h3>
</div>
<pre id="PHP" class="prettyprint">
InitPHP::registerAutoloader("test");
</pre>
<div class="nav"></div>

<div class="footer">版权所有：<a href="">http://initphp.com</a> InitPHP (A PHP Framework) By @Aliyun_zhuli</div>
<script src="static/jquery.js" type="text/javascript"></script>
<link href="static/prettify/prettify.css" rel="stylesheet" type="text/css">
<script src="static/prettify/prettify.js" type="text/javascript"></script>
<script type="text/javascript" src="static/comm.js"></script>
</body>
</html>
